package com.lenovo.lcdm.access.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.lenovo.lcdm.access.dto.AccessPolicyDto;
import com.lenovo.lcdm.access.dto.MenuPolicyTreeDto;
import com.lenovo.lcdm.access.dto.UserInfoDto;
import com.lenovo.lcdm.access.entity.AccessPolicy;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

/**
* @author xujing30
* @description 针对表【access_policy】的数据库操作Service
* @createDate 2024-02-01 17:23:35
*/
public interface AccessPolicyService extends IService<AccessPolicy> {

    /**
     * 查询menu id对应的group menu policy关系
     * @return
     */
    List<AccessPolicy> getByMenuId(Long menuId);

    /**
     * 删除menu id对应的group menu关系
     * @return
     */
    void removeByMenuId(Long menuId);

    /**
     * 新增
     * @param accessPolicyDto
     * @return
     */
    AccessPolicy saveAccessPolicy(AccessPolicyDto accessPolicyDto);

    /**
     * 修改
     * @param accessPolicyDto
     * @return
     */
    AccessPolicy updateAccessPolicy(AccessPolicyDto accessPolicyDto);

    /**
     * 修改
     * @param id
     * @return
     */
    boolean deleteAccessPolicy(Long id);

    /**
     * 分页查询访问权限
     * @param page
     * @param menuName -可选
     * @return
     */
    List<AccessPolicy> getAccessPolicyPage(Page page, String menuName);

    /**
     * 查询menuId, 对应groupId的权限控制，如果存在多条记录报错。
     * @param menuId
     * @param groupId
     * @return
     */
    AccessPolicy getAccessPolicyByMenuAndGroup(Long menuId, Long groupId);

    /**
     * 获取当前用户的菜单权限树结构
     * @return
     */
    MenuPolicyTreeDto getUserMenuPolicyTree();

    /**
     *
     * @param groupIds
     * @return
     */
    List<AccessPolicy> getByRoles(List<Long> groupIds);

    /**
     * 获取登录用户的基本信息及权限菜单信息
     * @return
     */
    UserInfoDto getCurrentUserPolicy();
}
